package com.uva.dbcs.gestionDeReservaAlquiler.despliegue;

import java.util.Date;
import java.util.List;

import javax.ejb.Local;

import com.uva.dbcs.gestionDeReservaAlquiler.dominio.Alquiler;
import com.uva.dbcs.gestionDeReservaAlquiler.dominio.Entrega;
import com.uva.dbcs.gestionDeReservaAlquiler.dominio.Reserva;
import com.uva.dbcs.gestionDeVehiculos.dominio.Vehiculo;

@Local
public interface GestorAlquilerReservaLocal {

	List<Alquiler> getAlquileres();

	List<Entrega> getEntregas();

	List<Reserva> getReservas();

	Reserva getReservaByID(int idReserva);

	Entrega getEntregaByID(int idEntrega);

	Alquiler getAlquilerByID(int idAlquiler);

	void crearReserva(Date fechaReserva, Date fechaInicioAlquiler,
			Date fechaFinAlquiler, int idCliente, int idVehiculo);

	void crearAlquiler(Date fechaInicio, Date fechaFin, int idCliente,
			int idVehiculo, int kilometrajeSalida, double precio);

	void crearEntrega(int idAlquiler, Date fechaEntrega, int idEmpleado,
			int KilometrajeEntrega);

	void actualizarEstadoReserva(int idReserva);

	/**
	 * Obtiene una lista de vehículos que no están ni alquilados ni reservados
	 * para unas fechas concretas que cumpla una serie de atributos indicando un
	 * modelo concreto
	 *
	 * Si no se quieren tener en cuenta pasar 0 o -1, null o false en función
	 * del tipo del argumento
	 * 
	 * @param idModelo
	 * @param fechaInicio
	 * @param fechaFin
	 * @return
	 */
	List<Vehiculo> buscarVehiculosDisponibles(int idModelo, Date fechaInicio,
			Date fechaFin);

	/**
	 * Obtiene una lista de vehículos que no están ni alquilados ni reservados
	 * para unas fechas concretas y con las cualidades específicadas.
	 * 
	 * Si no se quieren tener en cuenta pasar 0 o -1, null o false en función
	 * del tipo del argumento
	 * 
	 * @param costeMaximo
	 * @param costeMinimo
	 * @param fechaInicio
	 * @param fechaFin
	 * @param gps
	 * @param idFabricante
	 * @param puertas
	 * @return
	 */
	List<Vehiculo> buscarVehiculosDisponibles(int costeMaximo, int costeMinimo,
			Date fechaInicio, Date fechaFin, boolean gps, int idFabricante,
			int puertas);

}
